package gestionBulletins.controller;

import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;

import gestionBulletins.model.Section;
import gestionBulletins.model.persistance.DaoFactory;
import gestionBulletins.model.persistance.DaoSection;

import javax.swing.table.AbstractTableModel;

/**
 * Modele abstrait de la JTable qui s'occupe des sections.
 * @author Paraita Wohler
 *
 */
public class SectionsTableModel extends AbstractTableModel implements Observer {

	private static final long serialVersionUID = 1L;
	private ArrayList<Section> data;
	private DaoFactory daoFactory;
	private String[] nomCols = { "president" };
	
	/**
	 * Constructeur
	 * @param daoFactory le daoFactory utilisé pour les opérations vers la base de données
	 */
	public SectionsTableModel(DaoFactory daoFactory) {
		super();
		this.daoFactory = daoFactory;
		getData();
	}
	/**
	 * recupère toutes les sections de la base de données
	 */
	private void getData() {
		DaoSection ds = daoFactory.getDaoSection();
		data = (ArrayList<Section>) ds.getAllSections();
	}
	
	@Override
	public int getRowCount() {
		return data.size();
	}

	@Override
	public int getColumnCount() {
		return nomCols.length;
	}
	
	@Override
	public Class<?> getColumnClass(int arg0) {
		return String.class;
	}
	
	@Override
	public String getColumnName(int arg0) {
		return nomCols[arg0];
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		if (columnIndex == 0) {
			return (data.get(rowIndex)).getPresident();
		}
		/* devrait pas arriver */
		else {
			return null;
		}
	}
	
	@Override
	public boolean isCellEditable(int arg0, int arg1) {
		return false;
	}

	@Override
	public void update(Observable arg0, Object arg1) {
		//System.out.println("je viens d'etre updaté par l'observable !");
		getData();
		fireTableDataChanged();
	}

	/**
	 * getter de Section d'une ligne de la JTable correspondante
	 * @param numLigne le numéro de la ligne dans la JTable
	 * @return la section selectionnée dans la JTable
	 */
	public Section getSection(int numLigne) {
		return data.get(numLigne);
	}

	/**
	 * permet d'enlever une ligne donnée dans la JTable associée
	 * @param numLigne le numéro de la ligne à enlever de la JTable associée
	 */
	public void removeRow(int numLigne) {
		data.remove(numLigne);
	}
}
